home *** CD-ROM | disk | FTP | other *** search
/ IRIX Base Documentation 1998 November / IRIX 6.5.2 Base Documentation November 1998.img / usr / share / catman / u_man / cat3 / Tcl / hash.z / hash
Text File  |  1998-10-30  |  15KB  |  265 lines

  1.  
  2.  
  3.  
  4. TTTTccccllll____HHHHaaaasssshhhh((((3333TTTTccccllll))))                                                  TTTTccccllll____HHHHaaaasssshhhh((((3333TTTTccccllll))))
  5.  
  6.  
  7.  
  8. NNNNAAAAMMMMEEEE
  9.      Tcl_InitHashTable, Tcl_DeleteHashTable, Tcl_CreateHashEntry,
  10.      Tcl_DeleteHashEntry, Tcl_FindHashEntry, Tcl_GetHashValue,
  11.      Tcl_SetHashValue, Tcl_GetHashKey, Tcl_FirstHashEntry, Tcl_NextHashEntry,
  12.      Tcl_HashStats - procedures to manage hash tables
  13.  
  14. SSSSYYYYNNNNOOOOPPPPSSSSIIIISSSS
  15.      ####iiiinnnncccclllluuuuddddeeee <<<<ttttccccllll....hhhh>>>>
  16.  
  17.      TTTTccccllll____IIIInnnniiiittttHHHHaaaasssshhhhTTTTaaaabbbblllleeee(_t_a_b_l_e_P_t_r, _k_e_y_T_y_p_e)
  18.  
  19.      TTTTccccllll____DDDDeeeelllleeeetttteeeeHHHHaaaasssshhhhTTTTaaaabbbblllleeee(_t_a_b_l_e_P_t_r)
  20.  
  21.      Tcl_HashEntry *
  22.      TTTTccccllll____CCCCrrrreeeeaaaatttteeeeHHHHaaaasssshhhhEEEEnnnnttttrrrryyyy(_t_a_b_l_e_P_t_r, _k_e_y, _n_e_w_P_t_r)
  23.  
  24.      TTTTccccllll____DDDDeeeelllleeeetttteeeeHHHHaaaasssshhhhEEEEnnnnttttrrrryyyy(_e_n_t_r_y_P_t_r)
  25.  
  26.      Tcl_HashEntry *
  27.      TTTTccccllll____FFFFiiiinnnnddddHHHHaaaasssshhhhEEEEnnnnttttrrrryyyy(_t_a_b_l_e_P_t_r, _k_e_y)
  28.  
  29.      ClientData
  30.      TTTTccccllll____GGGGeeeettttHHHHaaaasssshhhhVVVVaaaalllluuuueeee(_e_n_t_r_y_P_t_r)
  31.  
  32.      TTTTccccllll____SSSSeeeettttHHHHaaaasssshhhhVVVVaaaalllluuuueeee(_e_n_t_r_y_P_t_r, _v_a_l_u_e)
  33.  
  34.      char *
  35.      TTTTccccllll____GGGGeeeettttHHHHaaaasssshhhhKKKKeeeeyyyy(_t_a_b_l_e_P_t_r, _e_n_t_r_y_P_t_r)
  36.  
  37.      Tcl_HashEntry *
  38.      TTTTccccllll____FFFFiiiirrrrssssttttHHHHaaaasssshhhhEEEEnnnnttttrrrryyyy(_t_a_b_l_e_P_t_r, _s_e_a_r_c_h_P_t_r)
  39.  
  40.      Tcl_HashEntry *
  41.      TTTTccccllll____NNNNeeeexxxxttttHHHHaaaasssshhhhEEEEnnnnttttrrrryyyy(_s_e_a_r_c_h_P_t_r)
  42.  
  43.      char *
  44.      TTTTccccllll____HHHHaaaasssshhhhSSSSttttaaaattttssss(_t_a_b_l_e_P_t_r)
  45.  
  46. AAAARRRRGGGGUUUUMMMMEEEENNNNTTTTSSSS
  47.      Tcl_HashTable    *_t_a_b_l_e_P_t_r    (in)      Address of hash table structure
  48.                                              (for all procedures but
  49.                                              TTTTccccllll____IIIInnnniiiittttHHHHaaaasssshhhhTTTTaaaabbbblllleeee, this must have
  50.                                              been initialized by previous call
  51.                                              to TTTTccccllll____IIIInnnniiiittttHHHHaaaasssshhhhTTTTaaaabbbblllleeee).
  52.  
  53.      int              _k_e_y_T_y_p_e      (in)      Kind of keys to use for new hash
  54.                                              table.  Must be either
  55.                                              TCL_STRING_KEYS,
  56.                                              TCL_ONE_WORD_KEYS, or an integer
  57.                                              value greater than 1.
  58.  
  59.  
  60.  
  61.  
  62.  
  63.                                                                         PPPPaaaaggggeeee 1111
  64.  
  65.  
  66.  
  67.  
  68.  
  69.  
  70. TTTTccccllll____HHHHaaaasssshhhh((((3333TTTTccccllll))))                                                  TTTTccccllll____HHHHaaaasssshhhh((((3333TTTTccccllll))))
  71.  
  72.  
  73.  
  74.      char             *_k_e_y         (in)      Key to use for probe into table.
  75.                                              Exact form depends on _k_e_y_T_y_p_e
  76.                                              used to create table.
  77.  
  78.      int              *_n_e_w_P_t_r      (out)     The word at *_n_e_w_P_t_r is set to 1
  79.                                              if a new entry was created and 0
  80.                                              if there was already an entry for
  81.                                              _k_e_y.
  82.  
  83.      Tcl_HashEntry    *_e_n_t_r_y_P_t_r    (in)      Pointer to hash table entry.
  84.  
  85.      ClientData       _v_a_l_u_e        (in)      New value to assign to hash table
  86.                                              entry.  Need not have type
  87.                                              ClientData, but must fit in same
  88.                                              space as ClientData.
  89.  
  90.      Tcl_HashSearch   *_s_e_a_r_c_h_P_t_r   (in)      Pointer to record to use to keep
  91.                                              track of progress in enumerating
  92.                                              all the entries in a hash table.
  93.  
  94.  
  95. DDDDEEEESSSSCCCCRRRRIIIIPPPPTTTTIIIIOOOONNNN
  96.      A hash table consists of zero or more entries, each consisting of a key
  97.      and a value.  Given the key for an entry, the hashing routines can very
  98.      quickly locate the entry, and hence its value.  There may be at most one
  99.      entry in a hash table with a particular key, but many entries may have
  100.      the same value.  Keys can take one of three forms:  strings, one-word
  101.      values, or integer arrays.  All of the keys in a given table have the
  102.      same form, which is specified when the table is initialized.
  103.  
  104.      The value of a hash table entry can be anything that fits in the same
  105.      space as a ``char *'' pointer.  Values for hash table entries are managed
  106.      entirely by clients, not by the hash module itself.  Typically each
  107.      entry's value is a pointer to a data structure managed by client code.
  108.  
  109.      Hash tables grow gracefully as the number of entries increases, so that
  110.      there are always less than three entries per hash bucket, on average.
  111.      This allows for fast lookups regardless of the number of entries in a
  112.      table.
  113.  
  114.      TTTTccccllll____IIIInnnniiiittttHHHHaaaasssshhhhTTTTaaaabbbblllleeee initializes a structure that describes a new hash
  115.      table.  The space for the structure is provided by the caller, not by the
  116.      hash module.  The value of _k_e_y_T_y_p_e indicates what kinds of keys will be
  117.      used for all entries in the table.  _K_e_y_T_y_p_e must have one of the
  118.      following values:
  119.  
  120.      TTTTCCCCLLLL____SSSSTTTTRRRRIIIINNNNGGGG____KKKKEEEEYYYYSSSS          Keys are null-terminated ASCII strings.  They
  121.                               are passed to hashing routines using the address
  122.                               of the first character of the string.
  123.  
  124.  
  125.  
  126.  
  127.  
  128.  
  129.                                                                         PPPPaaaaggggeeee 2222
  130.  
  131.  
  132.  
  133.  
  134.  
  135.  
  136. TTTTccccllll____HHHHaaaasssshhhh((((3333TTTTccccllll))))                                                  TTTTccccllll____HHHHaaaasssshhhh((((3333TTTTccccllll))))
  137.  
  138.  
  139.  
  140.      TTTTCCCCLLLL____OOOONNNNEEEE____WWWWOOOORRRRDDDD____KKKKEEEEYYYYSSSS        Keys are single-word values;  they are passed to
  141.                               hashing routines and stored in hash table
  142.                               entries as ``char *'' values.  The pointer value
  143.                               is the key;  it need not (and usually doesn't)
  144.                               actually point to a string.
  145.  
  146.      _o_t_h_e_r                    If _k_e_y_T_y_p_e is not TCL_STRING_KEYS or
  147.                               TCL_ONE_WORD_KEYS, then it must be an integer
  148.                               value greater than 1.  In this case the keys
  149.                               will be arrays of ``int'' values, where _k_e_y_T_y_p_e
  150.                               gives the number of ints in each key.  This
  151.                               allows structures to be used as keys.  All keys
  152.                               must have the same size.  Array keys are passed
  153.                               into hashing functions using the address of the
  154.                               first int in the array.
  155.  
  156.      TTTTccccllll____DDDDeeeelllleeeetttteeeeHHHHaaaasssshhhhTTTTaaaabbbblllleeee deletes all of the entries in a hash table and frees
  157.      up the memory associated with the table's bucket array and entries.  It
  158.      does not free the actual table structure (pointed to by _t_a_b_l_e_P_t_r), since
  159.      that memory is assumed to be managed by the client.  TTTTccccllll____DDDDeeeelllleeeetttteeeeHHHHaaaasssshhhhTTTTaaaabbbblllleeee
  160.      also does not free or otherwise manipulate the values of the hash table
  161.      entries.  If the entry values point to dynamically-allocated memory, then
  162.      it is the client's responsibility to free these structures before
  163.      deleting the table.
  164.  
  165.      TTTTccccllll____CCCCrrrreeeeaaaatttteeeeHHHHaaaasssshhhhEEEEnnnnttttrrrryyyy locates the entry corresponding to a particular key,
  166.      creating a new entry in the table if there wasn't already one with the
  167.      given key.  If an entry already existed with the given key then *_n_e_w_P_t_r
  168.      is set to zero.  If a new entry was created, then *_n_e_w_P_t_r is set to a
  169.      non-zero value and the value of the new entry will be set to zero.  The
  170.      return value from TTTTccccllll____CCCCrrrreeeeaaaatttteeeeHHHHaaaasssshhhhEEEEnnnnttttrrrryyyy is a pointer to the entry, which
  171.      may be used to retrieve and modify the entry's value or to delete the
  172.      entry from the table.
  173.  
  174.      TTTTccccllll____DDDDeeeelllleeeetttteeeeHHHHaaaasssshhhhEEEEnnnnttttrrrryyyy will remove an existing entry from a table.  The
  175.      memory associated with the entry itself will be freed, but the client is
  176.      responsible for any cleanup associated with the entry's value, such as
  177.      freeing a structure that it points to.
  178.  
  179.      TTTTccccllll____FFFFiiiinnnnddddHHHHaaaasssshhhhEEEEnnnnttttrrrryyyy is similar to TTTTccccllll____CCCCrrrreeeeaaaatttteeeeHHHHaaaasssshhhhEEEEnnnnttttrrrryyyy except that it
  180.      doesn't create a new entry if the key doesn't exist; instead, it returns
  181.      NULL as result.
  182.  
  183.      TTTTccccllll____GGGGeeeettttHHHHaaaasssshhhhVVVVaaaalllluuuueeee and TTTTccccllll____SSSSeeeettttHHHHaaaasssshhhhVVVVaaaalllluuuueeee are used to read and write an
  184.      entry's value, respectively.  Values are stored and retrieved as type
  185.      ``ClientData'', which is large enough to hold a pointer value.  On almost
  186.      all machines this is large enough to hold an integer value too.
  187.  
  188.      TTTTccccllll____GGGGeeeettttHHHHaaaasssshhhhKKKKeeeeyyyy returns the key for a given hash table entry, either as a
  189.      pointer to a string, a one-word (``char *'') key, or as a pointer to the
  190.      first word of an array of integers, depending on the _k_e_y_T_y_p_e used to
  191.      create a hash table.  In all cases TTTTccccllll____GGGGeeeettttHHHHaaaasssshhhhKKKKeeeeyyyy returns a result with
  192.  
  193.  
  194.  
  195.                                                                         PPPPaaaaggggeeee 3333
  196.  
  197.  
  198.  
  199.  
  200.  
  201.  
  202. TTTTccccllll____HHHHaaaasssshhhh((((3333TTTTccccllll))))                                                  TTTTccccllll____HHHHaaaasssshhhh((((3333TTTTccccllll))))
  203.  
  204.  
  205.  
  206.      type ``char *''.  When the key is a string or array, the result of
  207.      TTTTccccllll____GGGGeeeettttHHHHaaaasssshhhhKKKKeeeeyyyy points to information in the table entry;  this
  208.      information will remain valid until the entry is deleted or its table is
  209.      deleted.
  210.  
  211.      TTTTccccllll____FFFFiiiirrrrssssttttHHHHaaaasssshhhhEEEEnnnnttttrrrryyyy and TTTTccccllll____NNNNeeeexxxxttttHHHHaaaasssshhhhEEEEnnnnttttrrrryyyy may be used to scan all of the
  212.      entries in a hash table.  A structure of type ``Tcl_HashSearch'',
  213.      provided by the client, is used to keep track of progress through the
  214.      table.  TTTTccccllll____FFFFiiiirrrrssssttttHHHHaaaasssshhhhEEEEnnnnttttrrrryyyy initializes the search record and returns the
  215.      first entry in the table (or NULL if the table is empty).  Each
  216.      subsequent call to TTTTccccllll____NNNNeeeexxxxttttHHHHaaaasssshhhhEEEEnnnnttttrrrryyyy returns the next entry in the table
  217.      or NULL if the end of the table has been reached.  A call to
  218.      TTTTccccllll____FFFFiiiirrrrssssttttHHHHaaaasssshhhhEEEEnnnnttttrrrryyyy followed by calls to TTTTccccllll____NNNNeeeexxxxttttHHHHaaaasssshhhhEEEEnnnnttttrrrryyyy will return
  219.      each of the entries in the table exactly once, in an arbitrary order.  It
  220.      is unadvisable to modify the structure of the table, e.g.  by creating or
  221.      deleting entries, while the search is in progress.
  222.  
  223.      TTTTccccllll____HHHHaaaasssshhhhSSSSttttaaaattttssss returns a dynamically-allocated string with overall
  224.      information about a hash table, such as the number of entries it
  225.      contains, the number of buckets in its hash array, and the utilization of
  226.      the buckets.  It is the caller's responsibility to free the result string
  227.      by passing it to ffffrrrreeeeeeee.
  228.  
  229.      The header file ttttccccllll....hhhh defines the actual data structures used to
  230.      implement hash tables.  This is necessary so that clients can allocate
  231.      Tcl_HashTable structures and so that macros can be used to read and write
  232.      the values of entries.  However, users of the hashing routines should
  233.      never refer directly to any of the fields of any of the hash-related data
  234.      structures; use the procedures and macros defined here.
  235.  
  236.  
  237. KKKKEEEEYYYYWWWWOOOORRRRDDDDSSSS
  238.      hash table, key, lookup, search, value
  239.  
  240.  
  241.  
  242.  
  243.  
  244.  
  245.  
  246.  
  247.  
  248.  
  249.  
  250.  
  251.  
  252.  
  253.  
  254.  
  255.  
  256.  
  257.  
  258.  
  259.  
  260.  
  261.                                                                         PPPPaaaaggggeeee 4444
  262.  
  263.  
  264.  
  265.